// package: rewords-server-2024
// filename: mdo
// author: diogoxiang@gmail.com
// time: 2024/8/1 上午9:48

package mdo

import (
	"github.com/gogf/gf/v2/os/gtime"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"time"
)

// PublicFields 公共字段 BaseModel to be emmbered to other struct as audit trail perpurse
type PublicFields struct {
	ID        primitive.ObjectID `bson:"_id" json:"id,omitempty"`                          // 唯一ID
	CreatedAt time.Time          `bson:"created_at" json:"created_at,omitempty"`           // 创建时间 ISODate
	UpdatedAt time.Time          `bson:"updated_at,omitempty" json:"updated_at,omitempty"` // 修改时间 ISODate
	DeletedAt *time.Time         `bson:"deleted_at,omitempty" json:"deleted_at,omitempty"` // 删除时间 ISODate
	Ctime     int64              `bson:"ctime,omitempty" json:"ctime,omitempty"`           // 创建时间 TimestampMilli
}

// SetFieldsValue 设置公共字段值，在插入数据时使用
func (p *PublicFields) SetFieldsValue() {
	//now := time.Now()
	//glog.Println(p.ID.String())
	//now := gtime.Now().Local().Time
	// 默认相差8小时
	now := gtime.Now().UTC().Add(8 * time.Hour).Time
	nowTemp := gtime.TimestampMilli()
	if p.ID.IsZero() {
		p.ID = primitive.NewObjectID()
	}

	if p.CreatedAt.IsZero() {
		p.CreatedAt = now
		p.Ctime = nowTemp
	}
}

// PublicTime 只有更新时间, 与创建时间
// 主要用于部分 mode 可能不需要 _id 的情况
type PublicTime struct {
	CreatedAt time.Time  `bson:"created_at,omitempty" json:"created_at,omitempty"` // 创建时间
	UpdatedAt time.Time  `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
	DeletedAt *time.Time `bson:"deleted_at,omitempty" json:"deleted_at,omitempty"` // 删除时间// 修改时间
}

// SetTimeValue 设置时间默认时间值
// e == 0 设置 CreatedAt   e == 1 设置 UpdatedAt
func (m *PublicTime) SetTimeValue(e int) {
	now := gtime.Now().UTC().Add(8 * time.Hour).Time
	if e == 0 {
		m.CreatedAt = now
	}
	if e == 1 {
		m.UpdatedAt = now
	}
}
